const tsTopicList: string[] = [
  '从哪些方面来介绍对象类型？',
  '对象类型语法怎么书写？',
  '对象类型有什么注意点？',
  '对象类型可以使用哪两种进行简写？',
  '如何获取对象属性的类型？',
  '介绍对象的可选属性',
  '读取一个未被赋值的对象可选属性会返回什么',
  '如果使用一个对象的可选属性需要注意什么？',
  '对象的可选属性其实就相当于具有那种类型',
  '对象的可选属性与显式定义的undefined类型一样吗？',
  '介绍对象类型的只读属性',
  '对象的只读属性都有哪几种声明方式？',
  '使用readonly定义一个对象只读属性时，若该属性的属性值是一个对象时需要注意什么',
  '使用as const写在一个对象后面代表什么？',
  '当使用as const 定义一个只读对象时，若此时的变量名也定义了类型，需要注意什么？',
  '介绍对象类型的属性索引类型',
  '对象类型的属性索引类型是为了解决什么而提出的？',
  '对象类型的属性索引类型有哪三种方法？',
  '对象类型的属性索引类型，字符串和数值能同时声明吗？',
  '对象类型的属性索引类型如果都会数值型的会变成什么？',
  '对象类型的属性索引类型的缺点，值得提倡使用吗？',
  '介绍对象类型的解构赋值？',
  '介绍对象类型中的结构类型原则',
  '对象类型中的结构类型原则可能会出现的问题？',
  '介绍对象类型中严格字面量检查',
  '对象类型中字面量赋值和变量赋值有什么区别？',
  '介绍对象类型中的最小可选属性规则',
  '对象类型中如何规避最小可选属性？',
  '介绍对象类型中的空对象',
  '对象类型中的空对象其实是相当于Object还是object',
  '对象类型中的空对象中的属性来自哪里？',
  '对象类型中的对象包括什么？',
  '对象类型：如果想强制使用一个空对象如何做？',
  '介绍一下ts中的枚举',
  '枚举一般定义的是常量还是变量？',
  '枚举编译后会产生代码吗？要是生产代码，会产生什么代码？',
  '因为枚举编译后会产生代码，所以需要注意什么？',
  '使用const定义的枚举，编译后会怎么样？',
  '使用const定义的枚举，会不会产生对象，如果想产生对象该怎么办？',
  '枚举可以定义那些中类型？',
  '一般定义的枚举需要赋值吗？',
  '枚举的成员可以定义相同值吗？',
  '介绍一下字符串枚举',
  '字符串和数值能同时出现在一个枚举类型中吗？',
  '如果字符串和数值出现在一个枚举类型中，需要注意什么？',
  '介绍同名的枚举类型合并',
  '同名的枚举类型合并时，是否只能一个首成员的值可以省略不写',
  '同名的枚举类型合并时，成员的名可以同名吗？',
  '同名的枚举类型合并时，使用const定义跟不使用const定义可以混搭吗？',
  '介绍枚举类型的反向映射',
  '枚举类型的反向映射，会根据值查出来成员名，如果有多个相同的值，查出的结果是什么？',
  '枚举类型中的keyof运算符，可以获取什么？',
  '枚举类型中的keyof运算符获取成员名时，必须使用typeof吗？',
  '枚举类型的实质是什么？',
  '对于数组类型可以从哪些方面进行介绍？',
  '数组类型的特点？',
  '数组类型的写法有哪些？',
  '介绍一下只读数组？',
  '只读数组的写法有哪些中？',
  '只读数组的泛型写法怎么写？',
  '只读数组的泛型写法ReadonlyArrary<T>和Readonly<T[]>的区别是什么？',
  '只读数组和数组类型哪个是子类哪个是父类？',
  '数组和只读数组在函数参数中可能遇到的问题？',
  '介绍多维数组',
  '只读数组中的readonly关键字能和数组类型的泛型写法一起使用吗？',
  '元组类型可以从哪些方面介绍？',
  '元组类型的写法',
  '元组类型与数组类型的写法有什么不同',
  '介绍元组类型的可选成员',
  '元组类型中的可选成员需要放在什么位置',
  '一个元组类型，如果没有声明可能会出现的问题',
  '元组类型中的扩展运算符',
  '介绍元组类型中只读元组',
  '只读元组的写法是什么',
  '元组类型与只读元组那个是子类哪个是父类',
  'ts推断元组成员的数量是什么',
  '扩展运算符与数组之间可能出现的问题',
  '基本数据类型都有哪些？',
  '介绍一下undefined、null类型',
  'undefined、null能赋值其他任意类型吗？',
  'undefined、null什么情况不不能赋值其他任意类型，会报错',
  '如果一个没有定义类型的变量被赋值为undefined或null，此时ts会如何推断类型？',
  '介绍一下symbol类型',
  '介绍一下unique symbol类型',
  'symbol与unique symbol哪个是子类哪个是父类？',
  'unique symbol用在类的属性时，只能赋值给类的什么属性？',
  '对于Symbol值变量的类型，如果使用let声明，ts会推断为什么类型？',
  '对于Symbol值变量的类型，如果使用const声明，ts会推断为什么类型？',
  'const命令声明的变量时，被赋值为另一个symbol 类型的变量，ts会推断其类型是什么？',
  'let命令声明的变量，如果赋值为另一个unique symbol 类型的变量，ts会推断其类型是什么？',
  '什么是值类型？',
  '当ts推断时，如果const定义的变量不是对象时，会推断该变量是一个什么类型的？',
  '如果const定义的变量不是对象，没有声明类型时ts会推断成值类型，这样推断合理吗？',
  '如果const定义的变量是对象，没有声明类型时ts会怎么推断？',
  '当ts推断数值值类型时，会出现子类型与父类型吗？',
  '介绍一下typeof运算符',
  '介绍一下Object与object',
  '介绍一下any类型',
  '介绍一下never类型',
  '介绍一下unknown',
  'unknown类型的变量能赋值其他变量吗？',
  'unknown类型的变量能调用其属性与方法吗？',
  '如果使用unknown类型？',
  '如果不想被ts推断成any类型，需要怎么做？',
  '介绍一下type命令',
  'type命令能使用表达式吗？',
  'type命令具有块级作用域吗？',
  '介绍一下交叉类型',
  '介绍一下联合类型',
  '联合类型使用时需要注意什么？',
  '如果打开编译选项不让变量赋值为undefined或null，哪还有可能赋值成功吗？',
  '什么是包装对象类型？',
  '包装对象类型有哪些？',
  '包装对象类型和字面量类型的表示方法有什么区别',
  '什么是类型？',
  '如果理解类型',
  '在语法上js属于什么语言？',
  '类型的目地是什么？',
  '什么是静态类型什么是动态类型？',
  '静态类型的优点是什么？',
  '静态类型的缺点是什么？',
  'interface可以从哪些方面进行介绍？',
  '什么是interface，又叫什么？',
  'interface可以声明哪几种形式的类型？',
  'interface声明对象方法时会出现函数重载吗？如果发生该怎么做？',
  'interface声明对象方法类型时有哪些方法？',
  'interface如何为构造函数声明类型？',
  'interface都可以继承什么类型的？',
  'interface继承时谁是子类谁是父类？',
  'interface可以双重继承吗？',
  '如果interface继承时有同名的属性需要注意什么？',
  'interface同名接口合并，这样设计合理吗？',
  'interface同名接口合并时，如果属性名相同，其类型可以不相同吗？',
  'interface同名接口合并时，如果方法名相同，会发生函数重载吗？',
  'interface同名接口合并时，发生了函数重载，哪里的声明会优先执行？',
  'interface与type的相同点？',
  '如果想获取一个值的类型，使用type还是interface？',
  'interface与type的不同点是什么？',
  'interface能声明非对象类型吗？',
  'this能在type中使用还是interface中使用？',
  'type可以声明字符串等基本类型吗？',
  '对于复杂类型运算，比如联合类型、交叉类型可以使用interface吗？',
  'interface、type同名都会合并吗？',
  'type可以继承吗？',
  'type可以使用&合并interface、type吗？',
  '属性映射可以用在type还是interface中？',
  '一般情况下是建议使用interface还是type？',
  '声明函数如何声明类型',
  '表达式函数如何声明类型，有几种情况',
  '用什么可以声明函数类型？',
  '函数类型的返回值可以不用定义，但最好是定义是为了什么？',
  '函数类型以箭头函数定义时，需要注意什么？',
  '函数类型定义的参数类型可以比实际参数个数多吗？',
  '如何为箭头函数定义类型时，该箭头函数的参数是函数时，定义参数类型时怎么定义？',
  '函数类型如果参数是可选的，可以使用什么关键字声明？',
  '函数类型的参数如果是可选的，需要注意什么？',
  '对于函数的可选参数，参数的实际类型其实是什么？',
  '对于函数的可选参数，编写代码时，需要提前判断吗？',
  '函数参数有默认值其实就是可选参数吗？',
  '函数参数有默认值，这个默认值触发的条件是什么？',
  '函数的可选参数和参数默认值能一起使用吗？',
  '函数的默认值参数可以不放在末尾吗？',
  '函数参数的解构，如何声明参数类型，类似元组数组吗？',
  '解释函数rest剩余参数',
  '函数的函数rest剩余参数可以是数组类型也可以是元组类型吗？',
  '函数rest参数可以用于变量解构吗？',
  '如果函数参数是一个只读的，用什么关键字去声明？',
  '解释函数类型中的void类型',
  'void类型可以用于抛异常的函数吗？',
  '返回值为void类型的，可以接受返回值为函数吗？',
  '解释函数类型中的never类型',
  '函数返回值定义为never类型的，程序会执行结束吗？',
  '函数类型中的never类型与void类型的区别？',
  '函数类型中的never类型可以用在哪里？',
  '函数类型中的局部类型是什么？',
  '函数类型中定义的其他类型，在函数外可以访问吗？',
  '什么是函数重载？',
  '函数重载声明时的顺序有先后吗？',
  '一般可以时候什么类型可以替换函数重载？',
  '函数重载中，虽然在函数的具体实现里面有完整的类型声明，但是在函数调用类型时，要以哪里的类型为准？',
  '构造函数如何声明?',
  'ts中的模块可以从哪些方面进行介绍？',
  'ts中的模块支持ES6的语法吗？',
  '什么是模块？',
  '一个文件包含什么语句就是模块？',
  '如果一个文件不包含export语句那它是什么？',
  'import可以一起导出类型和值吗？',
  '为了不一起导出类型和值，提出了什么进行解决？',
  'import type 导入的全部都是类型吗？',
  'ts的模块如何导出导入CommonJS？',
  '使用export = 导出的，需要使用使用语句进行导入？',
  '模块的export = 实质是什么？',
  'import type在编译的时候是如何编译的？',
  '解释import type 编译时值为remove',
  '解释import type 编译时值为preserve',
  '解释import type 编译时值为error',
  '模块中的模块定位是干什么的？',
  '相对模块是什么？',
  '非相对模块是什么？',
  '解释编译参数moduleResolution',
  '解释编译参数moduleResolution值为Node',
  '解释编译参数moduleResolution值为Node时针对相对模块',
  '解释编译参数moduleResolution值为Node时针对非相对模块',
  '解释编译参数moduleResolution值为Classic',
  '解释编译参数moduleResolution值为Classic时针对相对模块',
  '解释编译参数moduleResolution值为Classic时针对非相对模块',
  '解释路径映射',
  '解释编译参数baseUrl',
  '解释编译参数paths',
  '解释编译参数rootDirs',
  '解释tsc --traceResolution',
  '解释tsc --noResolve',
  '如果模块定位没有指定默认值，那跟什么有关系？',
  'd.ts类型声明文件是干什么的？',
  '类型声明文件能实现代码吗？',
  '类型声明文件一般的文件名命名方法是什么？',
  '类型声明文件可以在tsconfig.json文件中定义吗？是通过那个编译选项？',
  '类型声明文件输出都有哪些方法？',
  '类型声明文件可能从哪些地方来？',
  'ts的内置类型声明文件存在那个文件夹下？',
  '类型声明文件如果编译器自动生成是由那个编译选项控制的？',
  '解释类型声明文件的三斜杆命令',
  '三斜杆命令都有哪些参数？',
  '解释三斜杆命令中的path参数',
  '解释三斜杆命令中的path参数指定的类型文件可以指定自己吗？',
  '解释三斜杆命令中的path参数指定的类型文件可以指定不存在的文件吗？',
  '解释三斜杆命令中的types参数',
  '解释三斜杆命令中的lib参数',
  '编译选项：baseUrl',
  '编译选项：paths',
  '编译选项：rootDirs',
  '编译选项：traceResolution',
  '编译选项：noResolve',
  '编译选项：moduleResolution',
  '编译选项：include',
  '编译选项：exclude',
  '编译选项：lib',
  '编译选项：files',
  '编译选项：declaration',
  '编译选项：target',
  '编译选项：noLib',
  '编译选项：typeRoots',
  '编译选项：types',
  'declare关键字可以从哪些方面介绍',
  'declare作用是什么',
  'declare都可以描述什么',
  '如果declare关键字没有给出变量具体的类型，则默认是什么？',
  'declare能给出变量的类型也能给出初始化吗？',
  '如果要为 JavaScript 引擎的原生对象添加属性和方法，可以使用declare global {}语法吗？',
  '泛型可以从哪些方面进行介绍',
  '泛型主要为了解决什么？',
  '泛型的特点是什么?',
  '声明函数使用泛型写法',
  '表达式函数如何使用泛型写法',
  '类如何使用泛型写法',
  '类其实就是构造函数对吗？',
  'type别名可以写成泛型吗？',
  '数组的泛型写法？',
  '只读数组的泛型写法？',
  '泛型参数类型可以有默认值吗？',
  '介绍泛型参数类型默认值？',
  '如果泛型参数类型有默认值那他其实是一个什么参数？',
  '如果泛型参数类型有默认值，书写的位置有要求吗？',
  '什么是泛型类型参数约束条件？',
  '泛型的约束条件可以约束自己吗？',
  '泛型可以同时设置约束条件和默认值吗？',
  '泛型要是一起设置约束条件和默认值有什么注意点吗？',
  '泛型的本质是什么？',
  '泛型的注意点有哪些？',
  '泛型可以嵌套使用吗？',
  '泛型类型参数的约束条件中，类型参数其实是约束条件的子类吗？',
  '泛型类型参数的约束条件使用什么关键字？',
  '泛型如果直接写在接口名的后面，则代表什么？',
  '关于类型断言的问题',
  '类型断言可以从哪些方面进行介绍',
  '什么是类型断言',
  '为什么会有类型断言',
  '类型断言是实质是什么？',
  '类型断言有几种写法，分别怎么写',
  '类型断言的应用有哪些？',
  '介绍类型断言的条件',
  '类型断言可以断言成一个无关的类型吗？',
  '什么是as const 断言',
  'let命令定义的类型会被推断成什么？',
  'const命令定义的类型会被推断成什么？',
  'as const断言可以用在变量上吗？',
  'as const 断言可以用在表达式上吗？',
  'as const的应用有哪些',
  '介绍一下非空断言',
  '介绍class类',
  '类的属性声明方式有哪两种？',
  '类的属性如果在顶层和构造方法中都设置了初始值，那以哪里的初始值为准？',
  '解释编译选项strictPropertyInitialization',
  '如果类的属性没有定义类型也没有设置初始值，ts会类型推断为什么？',
  '类的属性如果是只读的，可以使用什么修饰符？',
  '类的属性使用readonly修饰符的注意点',
  '解释类中的方法的类型',
  '类中的set、get方法使用时的规则是什么？',
  '类的属性如果只有get方法，那它是什么属性？',
  '类中的属性的set、get方法的可访问性可以不一致吗？',
  '类的属性索引类型',
  '类定义属性索引类型时，如果有方法，需要也定义方法吗？',
  '在类的属性索引类型时，属性的set、get方法会被认为是属性还是方法',
  '介绍类中的implement关键字',
  '类中的interface、type的主要作用是什么？',
  'implement关键字后不仅可以是接口，也可以是类，对吗？',
  'implement关键字可以实现多个接口吗？',
  '问题：implement同时实现多个接口比较麻烦，如何解决？',
  '为什么说implement同时实现多个接口比较麻烦？',
  'ts中允许有同名的类吗？允许有同名的类和接口吗？',
  '同名的类合并时，如果有同名的属性时，需要注意什么？',
  'ts的类本身就是一种类型，它代表什么类型？可以代表自身类型吗？',
  'ts中三种给对象定义类型，都有哪几种？',
  '如何获取类自身的类型？',
  '介绍类中的结构原则',
  '类可以使用什么关键字实现继承？',
  '类继承时如果有同名的属性，属性的类型可以不一样吗？',
  'extends后可以是表达式吗？它只要满足什么条件就行？',
  '问题：当编译设置的target大于2022时，对于那些子类只设置了类型、没有初值的顶层属性在基类中被赋值后，会被重置为undefined',
  '类的可访问修饰符都有几种？分别含义是什么？',
  '介绍类的实例属性简写',
  '类的实例属性简写时public可以省略吗？',
  '介绍private',
  '介绍protected',
  '介绍public',
  '介绍类中的静态成员',
  '类可以写成泛型写法吗？',
  '类的静态成员可以使用泛型的类型参数吗？',
  '介绍abstract',
  '介绍类的抽象类',
  '介绍类的抽象成员',
  '类的抽象类可以实例化吗？',
  '抽象类的注意点有哪些？',
  '类方法中的this，表示什么',
  '在类的内部this可以当做类型使用吗？如果可以表示什么',
  'this类型能用在静态成员中吗？',
  '编译选项noImplicitThis',
  '背诵：类中的this有两种作用：1. 类方法中的this，表示该方法当前所在的对象。2. this本身可以当做类型使用，表示当前类的实例对象',
  '类中的this有两种作用分别是什么？',
  '介绍typeof运算符',
  '介绍keyof运算符',
  'keyof运算符作用是什么？',
  '背诵：keyof运算符接受一个对象类型作为参数，返回该对象的所有键名组成的联合类型。',
  'keyof运算符用途',
  'keyof用于数组或元组类型时，返回什么？',
  '介绍ts中in运算符',
  '介绍js中in运算符',
  '背诵：ts中in运算符用来取出（遍历）联合类型的每一个成员类型。',
  '介绍方括运算符',
  '背诵：方括运算符用来取出对象的键值类型，',
  '介绍条件运算符 extends...?:',
  '背诵：条件运算符根据当前类型是否符合某种条件，返回不同的类型',
  '背诵：条件运算符语法：T extends U ? X : Y',
  '介绍infer关键字',
  '介绍is运算符',
  '介绍模板字符串',
  '介绍satisfies运算符',
  '介绍类型映射',
  '背诵：映射就是将一种类型按照映射规则，转成另一种类型，通常用于对象类型。',
]


export {
  tsTopicList,
}
